Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by www.netzwerkartist.de...

 << zurück
Visual C# 2005 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2005

Visual C# 2005
1.320 S., mit 2 CDs, 59,90 Euro
Galileo Computing
ISBN 3-89842-586-X
gp Kapitel 21 MDI-Anwendungen
  gp 21.1 Das MDI-Hauptfenster
  gp 21.2 Die Subfenster
  gp 21.3 Zugriff auf die Subfenster
    gp 21.3.1 Zugriff auf das aktive Subfenster
    gp 21.3.2 Zugriff auf die Subfenster eines bestimmten Typs
  gp 21.4 Das Menü in einer MDI-Anwendung
    gp 21.4.1 Subfenster anordnen
    gp 21.4.2 Subfenster mit eigenen Menüs
  gp 21.5 Symbol- und Statusleiste des Subfensters
  gp 21.6 Die Liste der geöffneten untergeordneten Fenster
  gp 21.7 Beispiel einer MDI-Anwendung


Galileo Computing

21.3 Zugriff auf die Subfenstedowntop

Sehen Sie sich noch einmal die Anweisung an, mit der neue Subfenster erstellt und angezeigt werden:


SubForm frm = new SubForm();
frm.MdiParent = this;
frm.Show();

Wird das erste Subfenster erzeugt, kann dieses mit frm angesprochen werden. Mit dem Erzeugen des zweiten Subfensters wird die Objektvariable frm »umgebogen« und zeigt auf die Startadresse des zweiten Subfensters. Das erste wird zwar unter frm nicht mehr referenziert, ist aber dennoch weiterhin im Hauptfenster zu sehen, weil das Objekt nicht zerstört worden ist. Jetzt stellt sich natürlich die Frage, wie auf die einzelnen Subfenster zugegriffen werden kann.

Es erstaunt sicherlich nicht, dass die Referenzen aller geöffneten Subfenster in einem Array verwaltet werden. Dieses Array kann über die Eigenschaft MdiChildren des MDI-Hauptfensters ausgewertet werden.


public Form[] MdiChildren {get;}

Die Eigenschaft bietet sich auch dann an, wenn auf alle Subfenster dieselben Operationen ausgeführt werden müssen – beispielsweise um die darin enthaltenen Daten vor dem Schließen der Anwendung zu speichern.

Öffnet der Anwender die Subfenster Dokument 1... Dokument 10 und schließt ein oder mehrere, z.B. Dokument2 und Dokument7, hinterlässt dieses Array keine unbelegten Indizes und kann deshalb vom ersten bis zum letzten Index durchlaufen werden:


for(int i = 0; i < this.MdiChildren.Length; i++) {
  // Anweisungen
}

Die Überprüfung, ob der sich aktuell im Zugriff befindliche Index den Inhalt null aufweist, ist deshalb nicht notwendig.


Galileo Computing

21.3.1 Zugriff auf das aktive Subfenster  downtop

In der Menüleiste eines MDI-Hauptfensters findet man normalerweise immer die Menüpunkte Speichern und Speichern unter..., um die Eingaben im aktiven Subfenster zu sichern. Mit der Eigenschaft ActiveMdiChild des MDI-Hauptfensters können Sie sich dazu die Referenz auf das aktivierte MDI-Subfenster besorgen:


public Form ActiveMdiChild {get;}

Nehmen wir an, dass das Subfenster eine Textbox enthält, deren Eigenschaft MultiLine=true gesetzt ist und, wie üblich bei einem Dokumentenfenster, den gesamten Clientbereich des Subfensters einnimmt. Mit


SubForm frm = (SubForm)(this.ActiveMdiChild);

besorgen Sie sich die Referenz auf das aktive Subfenster. Weil der Rückgabewert von ActiveMdiChild vom Typ Form ist, muss vorher noch in den Typ des Subfensters konvertiert werden, hier also exemplarisch in SubForm.

Der Versuch, mit


frm.textBox1.Text = ".......";

den Inhalt der Textbox des Subfensters auszuwerten, könnte allerdings mit einer Fehlermeldung des C#-Compilers enden. Der Grund dafür lässt sich sehr einfach finden. Wenn Sie nämlich mit der Unterstützung des Windows Forms-Designers die Textbox hinzugefügt haben, ist deren Deklaration private.


private System.Windows.Forms.TextBox textBox1;

Sie müssen private mindestens durch internal ersetzen, um den Zugriff auch von außerhalb der Form zu gestatten.


Der Zugriffsmodifizierer der Steuerelemente des Subfensters, auf die vom Hauptfenster aus zugegriffen wird, muss internal oder public sein. Im Eigenschaftsfenster können Sie die Zugriffsmodifizierer auch mit der Eigenschaft Modifiers passend einstellen.

Abhängig davon, unter welchen Rahmenbedingungen Sie auf ActiveMdiChild zugreifen, kann es erforderlich sein zu prüfen, ob überhaupt ein Subfenster geöffnet ist. Wenn aktuell kein MDI-Subfenster geöffnet ist, liefert die Eigenschaft ActiveMdiChild null zurück. Das sollten Sie daher zuvor unbedingt prüfen.


if(this.ActiveMdiChild != null) {
  SubForm frm = (SubForm)(this.ActiveMdiChild);
  frm.textBox1.Text = ".......";


Galileo Computing

21.3.2 Zugriff auf die Subfenster eines bestimmten Typs  toptop

MDI-Anwendungen haben meistens nur einen Subfenstertyp. Das schließt aber nicht die Möglichkeit aus, auch mehrere unterschiedliche zu verwalten. Da davon ausgegangen werden muss, dass zu einem gegebenen Zeitpunkt der Laufzeit konkrete Objekte beider Typen innerhalb des Hauptfensters geöffnet sein könnten, enthält auch das von MdiChildren zurückgelieferte Array beide Typen. Soll auf das Steuerelement eines bestimmten untergeordneten Fensters zugegriffen werden, muss daher zuerst eine Typüberprüfung mit dem is-Operator erfolgen.


for(int i = 0; i < this.MdiChildren.Length; i++) {
  if (this.MdiChildren[i] is SubForm) {
    ((Form2)this.MdiChildren[i]).textBox1.Text = "...";
  }
  else if(this.MdiChildren[i] is SubForm2) {
    ...
  }
}

 << zurück
  
  Zum Katalog
Zum Katalog: Visual C# 2005
Visual C# 2005
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Fortgeschrittene Programmierung mit Visual C# 2005






 Fortgeschrittene
 Programmierung
 mit Visual C# 2005


Zum Katalog: Einstieg in Visual C# 2005






 Einstieg in
 Visual C# 2005


Zum Katalog: Einstieg in Visual Basic 2005






 Einstieg in
 Visual Basic 2005


Zum Katalog: Visual Basic 2005






 Visual Basic 2005


Zum Katalog: Java ist auch eine Insel






 Java ist auch eine
 Insel


Zum Katalog: Konzepte und Lösungen für Microsoft-Netzwerke






 Konzepte und
 Lösungen für
 Microsoft-Netzwerke


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de